import axios from 'axios'

// 创建统一的 axios 实例，使用 vite 代理的前缀 /api
const http = axios.create({
  baseURL: '/api',
  timeout: 60000, // 60秒超时，方便测试对接
  // 移除默认的Content-Type设置，让浏览器根据请求类型自动设置正确的Content-Type
})

// 请求拦截器：可在此添加鉴权等逻辑
http.interceptors.request.use(
  (config) => {
    // 定义不需要token的路径白名单（与后端JWT拦截器排除路径保持一致）
    const excludePaths = [
      '/user/register',
      '/user/login', 
      '/user/sellerLogin',
      '/user/updatePassword',
      '/product/queryByPId/',
      '/product/queryMessageById/',
      '/product/query',
      '/product/incrementViewCount/',
      '/category/getPublicCategory',
      '/category/getSellerCategory/',
      '/pay/alipay_notify_url',
      '/pay/payment/result',
      '/seller/querySellerById'
    ]
    
    // 检查当前请求路径是否在白名单中
    const requestPath = config.url.replace('/api', '') // 移除baseURL前缀
    const shouldExcludeToken = excludePaths.some(path => {
      if (path.endsWith('/')) {
        // 对于以/结尾的路径，检查是否以该路径开头
        return requestPath.startsWith(path)
      } else {
        // 对于精确路径，进行精确匹配
        return requestPath === path
      }
    })
    
    // 只有不在白名单中的路径才添加token
    if (!shouldExcludeToken) {
      // 尝试获取所有可能的token键名，包括用户和商家的token
      const token = localStorage.getItem('userToken') || 
                   localStorage.getItem('Token') || 
                   localStorage.getItem('sellerToken') || 
                   localStorage.getItem('token')
      if (token) {
        config.headers.Authorization = `Bearer ${token}`
      }
    }
    
    return config
  },
  (error) => Promise.reject(error)
)

// 响应拦截器：统一返回 data，并规范错误信息
http.interceptors.response.use(
  (response) => response.data,
  (error) => {
    const msg = error?.response?.data?.message || error.message || '网络错误'
    return Promise.reject(new Error(msg))
  }
)

export default http
